#ifndef HOUGH_TRANSFORMATION_OPERATOR_HPP
#define HOUGH_TRANSFORMATION_OPERATOR_HPP

//------------------------------------------------------------------------------
// Fichier d'entête utilisés
//------------------------------------------------------------------------------
#include "Operator.hpp"
#include "Gradiant.hpp"
#include "BinaryImage.hpp"
#include "SegmentContainer.hpp"

namespace ImageAnalysis
{
//----------------------------------------------------------------------
// Cette classe permet d'appliquer le seuillage par hystérésis
// à une image gradiant pour la binariser. On passe en paramètre
// une méthode permettant de trouver les seuils, qui sont appliqués
// par cette classe.
//----------------------------------------------------------------------
class HoughTransformationOperator : public Operator
{
public:
		//----------------------------------------------------------------------
		// Structure
		//----------------------------------------------------------------------

		//----------------------------------------------------------------------
		// Constructeur
		//----------------------------------------------------------------------
		HoughTransformationOperator( Gradiant* gradiant, BinaryImage* refinedImage, SegmentContainer::TSegmentContainerList* segmentContainerList );

		//----------------------------------------------------------------------
		// Destructeur
		//----------------------------------------------------------------------
		virtual ~HoughTransformationOperator();

		//----------------------------------------------------------------------
		// Méthode permettant d'effectuer le seuillage par hystérésis
		//----------------------------------------------------------------------
		virtual void Process( );

private:
		//----------------------------------------------------------------------
		//
		//----------------------------------------------------------------------
		Gradiant* currentGradiant;
		BinaryImage* currentRefinedImage;
		SegmentContainer::TSegmentContainerList* currentSegmentContainerList;

		//----------------------------------------------------------------------
		// Constructeur par copie et oprérateur d'affectation en privée pour
		// interdire leur utilisation
		//----------------------------------------------------------------------
		HoughTransformationOperator( const HoughTransformationOperator& copy);
		HoughTransformationOperator& operator=( const HoughTransformationOperator& copy );
};

}
#endif //HOUGH_TRANSFORMATION_OPERATOR_HPP
